Примерная структура класса AudioRecorderApp (без некоторых инструкций) using System; using System.IO; using Xamarin.Forms; using Plugin.AudioRecorder; namespace AudioRecorderApp { public partial class MainPage : ContentPage { private readonly AudioRecorderService audioRecorder; // Сервис для записи аудио private readonly Label statusLabel; // Статус приложения private readonly ListView audioFilesList; // Список аудиофайлов private string selectedFilePath; // Выбранный файл для воспроизведения или удаления public MainPage() { audioRecorder = new AudioRecorderService { StopRecordingOnSilence = false, FilePath = Path.Combine(FileSystem.AppDataDirectory, $"audio_{DateTime.Now:yyyyMMdd_HHmmss}.wav") }; // Кнопка для записи аудио // Кнопка для обновления списка записанных файлов loadAudioFilesButton.Clicked += LoadAudioFiles; // Кнопка для воспроизведения выбранного аудио // Кнопка для удаления выбранного аудио Button deleteAudioButton = new Button { Text = "Удалить 🚮", HorizontalOptions = LayoutOptions.Center }; deleteAudioButton.Clicked += DeleteAudio; // ListView для отображения аудиофайлов audioFilesList = new ListView { VerticalOptions = LayoutOptions.FillAndExpand }; audioFilesList.ItemSelected += OnAudioFileSelected; // Label для отображения статуса statusLabel = new Label { Text = "Готов к записи 🚀", HorizontalOptions = LayoutOptions.Center }; // Оформление макета Content = new StackLayout { Padding = new Thickness(10), Children = { new Label { Text = "Аудиозапись и управление файлами 🎙️", FontSize = 20, HorizontalOptions = LayoutOptions.Center }, recordAudioButton, loadAudioFilesButton, playAudioButton, deleteAudioButton, audioFilesList, statusLabel } }; } // Метод для записи аудио: private async void RecordAudioAsync(object sender, EventArgs e) { try { statusLabel.Text = "Запись началась... 🎤"; var audioRecordTask = await audioRecorder.StartRecording(); await audioRecordTask; statusLabel.Text = "Запись завершена ✅"; } catch (Exception ex) { await DisplayAlert("Ошибка 📛", ex.Message, "OK"); statusLabel.Text = "Ошибка записи 🚫"; } } // Метод для загрузки списка аудиофайлов // Метод для обработки выбора аудиофайла // Метод для воспроизведения аудио: private void PlayAudio(object sender, EventArgs e) { if (!string.IsNullOrEmpty(selectedFilePath)) { var audioPlayer = Plugin.SimpleAudioPlayer.CrossSimpleAudioPlayer.Current; audioPlayer.Load(selectedFilePath); audioPlayer.Play(); statusLabel.Text = "Воспроизведение началось 🎶"; } else { DisplayAlert("Ошибка 📛", "Выберите аудиофайл.", "OK"); } } // Метод для удаления аудио: private async void DeleteAudio(object sender, EventArgs e) { if (!string.IsNullOrEmpty(selectedFilePath) && File.Exists(selectedFilePath)) { File.Delete(selectedFilePath); statusLabel.Text = $"Файл {Path.GetFileName(selectedFilePath)} удалён 🚮"; LoadAudioFiles(sender, e); // Обновляем список после удаления } else { await DisplayAlert("Ошибка 📛", "Файл не найден или не выбран.", "OK"); } } } }